package com.jinyou.utils.common;

import o2o.config.exception.JyResultException;

import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 使用正则表达式验证输入格式
 *
 * @author Jahnke 2015年8月23日16:09:37
 */
public class ValidateUtil {

    /**
     * @Author: guo_wei
     * @Date: 2021/6/4 0004 18:01
     */
    public static void validate(String msg, Object... params) {
        boolean check = false;
        for (Object param : params) {
            if (param == null) {
                check = true;
            }else if (param instanceof String) {
                check = param == "";
            } else if (param instanceof Boolean) {
                check = (Boolean) param;
            }
            if (check) {
                throw new JyResultException(msg);
            }
        }
    }



    /**
     * 验证手机号码
     *
     * @param username
     * @return
     */
    public static boolean isNotMobile(String username) {
        if (username == null || username.equals("")) {
            return true;
        }
        boolean flag = true;
        try {
            // /**
            // * 移动开头 ：134、135、136、137、138、139、 147 150、151、152、157、158、159
            // 181、182、183、187、188、189
            // * 联通开头：130、131、132、 155、156、 185、186
            // * 电信开头：133、 153、 180、189
            // */
            // 目前只检测13-18
            Pattern regex = Pattern
                    .compile("^(((1[3-8]))\\d{9})|(0\\d{2}-\\d{8})|(0\\d{3}-\\d{7})$");
            Matcher matcher = regex.matcher(username);
            flag = !matcher.matches();
        } catch (Exception e) {
            flag = true;
        }
        return flag;
    }

    /**
     * 验证邮箱格式
     *
     * @param email
     * @return
     */
    public static boolean checkEmail(String email) {
        if (email == null || email.equals("")) {
            return false;
        }
        boolean flag = false;
        try {
            String check = "^([a-z0-9A-Z]+[-|_|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
            Pattern regex = Pattern.compile(check);
            Matcher matcher = regex.matcher(email);
            flag = matcher.matches();
        } catch (Exception e) {
            flag = false;
        }
        return flag;
    }

    /**
     * @throws
     * @方法名: checkPwd
     * @方法描述: 验证密码
     * @方法参数 @param password
     * @方法参数 @return
     * @返回类型 boolean
     */
    public static boolean isNotPassword(String password) {
        if (password == null || password.equals("")) {
            return true;
        }
        if (password.length() < 4 || password.length() > 19) {
            return true;
        }
        return false;
    }

    //不等于空，返回true
    public static boolean isNotNull(String strs) {
        if (strs == null || strs.equals("")) {
            return false;
        }
        return true;
    }

    //为空即可返回true
    public static boolean isNull(String strs) {
        if (strs != null && !strs.equals("")) {
            return false;
        }
        return true;
    }

    //验证字段为空--全部为空即可返回true
    public static boolean isAllNull(String... strs) {
        if (strs.length > 0) {
            for (int i = 0; i < strs.length; i++) {
                if (strs[i] != null && !strs[i].equals("")) {
                    return false;
                }
            }
        }
        return true;
    }


    ///add by zhuwx
    //验证是否为ID
    public static boolean isID(Long l) {
        if (null == l || l <= 0) {
            return false;
        }
        return true;
    }

    //验证不是ID
    public static boolean isNotID(Long l) {
        return !isID(l);
    }


    //验证大于0 的long
    public static boolean isAbsLong(Long l) {
        if (null == l || l <= 0) {
            return false;
        }
        return true;
    }

    //验证 不是大于0 的long
    public static boolean isNotAbsLong(Long l) {
        return !isAbsLong(l);
    }


    //验证是否大于0 的int
    public static boolean isAbsInteger(Integer i) {
        if (null == i || i < 0) {
            return false;
        }
        return true;
    }

    public static boolean isNotAbsInteger(Integer i) {
        return !isAbsInteger(i);
    }

    //验证大于0的double
    public static boolean isAbsDouble(Double d) {
        if (null == d || d <= 0) {
            return false;
        }
        return true;
    }

    //验证大于0的double
    public static boolean isNotAbsDouble(Double d) {
        return !isAbsDouble(d);
    }

    //对象是否为空
    public static boolean isNull(Object o) {
        if (null == o) {
            return true;
        }
        return false;
    }

    //list是否有数据
    public static boolean isAbsList(List<?> list) {
        if (null != list && list.size() > 0) {
            return true;
        }
        return false;
    }

    public static boolean isAbsMap(Map<?, ?> map) {
        if (null != map && map.size() > 0) {
            return true;
        }
        return false;
    }

    //验证是否为网络图片
    public static boolean isNetUrl(String url) {
        try {
            if (isNotNull(url) && url.length() > 4 && "http".equalsIgnoreCase(url.substring(0, 4))) {
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }

        return false;
    }

    //验证是否为网络图片
    public static boolean isNotNetUrl(String url) {
        if (isNull(url)) {
            return false;
        }
        return !isNetUrl(url);
    }

    //是否为经纬度
    public static boolean isLatLng(Double lat, Double lng) {
        if (null != lat && null != lng && 0 != lat && 0 != lng) {
            return true;
        }
        return false;
    }

    public static boolean isNotLatLng(Double lat, Double lng) {
        return !isLatLng(lat, lng);
    }
}
